/* 
函数重载: 函数名相同, 而形参不同的多个函数
*/
/* 
需求: 我们有一个add函数，它可以接收2个string类型的参数进行拼接，也可以接收2个number类型的参数进行相加 
*/

(() => {

  // 函数重载声明
  function add (x: string, y: string): string
  function add (x: number, y: number): number

  // 重载函数声明
  function add(x: string|number, y: string|number): string|number {
    if (typeof x==='string' && typeof y==='string') {
      return x + y
    } else if (typeof y==='number' && typeof x==='number') {
      return x + y
    } else {
      throw new Error('类型不对')
    }
  }




  console.log(add(1, 3))
  console.log(add('ab', 'cd'))
  // console.log(add('ab', 3))  // error

})()